#include "widget.h"
#include "ui_widget.h"
#include <QTreeWidgetItem>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //设置根节点名称
    ui->treeWidget->setHeaderLabel("1");
    //创建结点对象
    QTreeWidgetItem* item1 = new QTreeWidgetItem();
    item1->setText(0,"猫");
    ui->treeWidget->addTopLevelItem(item1);

    //给顶层元素添加子元素
     QTreeWidgetItem* citem1 = new QTreeWidgetItem();
     citem1->setText(0,"狸花猫");
     item1->addChild(citem1);
     //就不多添加了...

    QTreeWidgetItem* item2 = new QTreeWidgetItem();
    item2->setText(0, "狗");
    ui->treeWidget->addTopLevelItem(item2);
    QTreeWidgetItem* item3 = new QTreeWidgetItem();
    item3->setText(0, "⻦");
    ui->treeWidget->addTopLevelItem(item3);
}

Widget::~Widget()
{
    delete ui;
}

//添加顶层元素
void Widget::on_pushButton_clicked()
{
    //获取输入框内容
    QString text = ui->lineEdit->text();
    if(text == QString()){
        text = "默认值...";
    }
    //将内容创建项目
    QTreeWidgetItem* item = new QTreeWidgetItem();
    item->setText(0,text);
    //添加到顶层
    ui->treeWidget->addTopLevelItem(item);
}


//添加选中的子元素
void Widget::on_pushButton_2_clicked()
{
    //获取当前选中的顶层元素
    QTreeWidgetItem* item = ui->treeWidget->currentItem();
    if(item == nullptr) return ;
    //获取输入框内容
    QString text = ui->lineEdit->text();
    if(text == QString()){
        text = "默认值...";
    }

    //将输入框内容添加到创建的新子元素中
    QTreeWidgetItem* citem = new QTreeWidgetItem();
    citem->setText(0,text);

    //给顶层添加新元素
    item->addChild(citem);
}

//删除选中的节点
void Widget::on_pushButton_3_clicked()
{
    //获取当前选中的节点
     QTreeWidgetItem* item = ui->treeWidget->currentItem();
     if(item == nullptr) return ;//注意判断，防止非法访问
     //需要获取父元素，通过父元素进行删除
     QTreeWidgetItem* pitem = item->parent();
     //若为空则，此时已经是顶层元素
     if(pitem == nullptr){
         //获取指定节点的顶层元素的下标
         int index = ui->treeWidget->indexOfTopLevelItem(item);
         ui->treeWidget->takeTopLevelItem(index);
     }
     else{ //若不是则：
         //通过获取的父元素，删除指定的子元素
         pitem->removeChild(item);

     }


}
